package state_pattern;

import lombok.Builder;
import lombok.Data;
import state_pattern.concrete.AttackState;

/**
 * @author 申书航
 * @version 1.0
 * 角色类，表示游戏中的角色，包含状态、属性和行为
 */
@Data
@Builder
public class Role {

    private State state;

    private String name;

    private int attack;

    private int hp;

    private int speed;

    private int currPos;

    private int targetPos;

    /**
     * 改变角色的状态并执行进入状态的操作
     * @param state 新的状态
     */
    public void changeState(State state) {
        this.state = state;
        this.state.onEnter();
    }

    /**
     * 对目标执行攻击，改变状态为攻击状态
     * @param target 攻击目标
     */
    public void attack(Role target) {
        changeState(new AttackState(this, target));
    }

    /**
     * 更新角色状态，执行当前状态的行为
     */
    public void update() {
        this.state.execute();
    }
}

